package ru.mirent.json;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.function.Function;

public class ValidateJson implements Function<String, Boolean> {
    private final JsonFactory jsonFactory;

    public ValidateJson(ObjectCodec objectCodec) {
        jsonFactory = objectCodec.getFactory();
    }

    public ValidateJson() {
        this(new ObjectMapper());
    }

    /**
     * Проверка корректности переданного Json.
     * @param s Json структуры в виде {@link String}
     * @return true при корректном Json, иначе false
     */
    @Override
    public Boolean apply(String s) {
        if (s.startsWith("[") || s.startsWith("{")) {
            try {
                JsonParser jsonParser = jsonFactory.createParser(s);
                while (jsonParser.nextToken() != null) {
                    // Пустой цикл для перебора содержимого. При корретном Json ошибки отброшено не будет.
                }
                return true;
            } catch (IOException e) {
                return false;
            }
        }
        return false;
    }
}
